﻿////服务器
//#include <iostream>
//#include <websocketpp/config/asio_no_tls.hpp>
//#include <websocketpp/server.hpp>
//using namespace std;
//typedef websocketpp::server<websocketpp::config::asio> websocketsvr;
//typedef websocketsvr::message_ptr message_ptr;
//using websocketpp::lib::placeholders::_1;
//using websocketpp::lib::placeholders::_2;
//using websocketpp::lib::bind;
//// websocket连接成功的回调函数
//void OnOpen(websocketsvr* server, websocketpp::connection_hdl hdl) {
//	cout << "连接成功" << endl;
//}
//// websocket连接成功的回调函数
//void OnClose(websocketsvr* server, websocketpp::connection_hdl hdl) {
//	cout << "连接关闭" << endl;
//}
//// websocket连接收到消息的回调函数
//void OnMessage(websocketsvr* server, websocketpp::connection_hdl
//	hdl, message_ptr msg) {
//	cout << "收到消息" << msg->get_payload() << endl;
//	// 收到消息将相同的消息发回给websocket客⼾端
//	server->send(hdl, msg->get_payload(), websocketpp::frame::opcode::text);
//}
//// websocket连接异常的回调函数
//void OnFail(websocketsvr* server, websocketpp::connection_hdl hdl) {
//	cout << "连接异常" << endl;
//}
//// 处理http请求的回调函数 返回⼀个html欢迎⻚⾯
//void OnHttp(websocketsvr* server, websocketpp::connection_hdl hdl) {
//	cout << "处理http请求" << endl;
//	websocketsvr::connection_ptr con = server->get_con_from_hdl(hdl);
//	std::stringstream ss;
//	ss << "<!doctype html><html><head>"
//		<< "<title>hello websocket</title><body>"
//		<< "<h1>hello websocketpp</h1>"
//		<< "</body></head></html>";
//	con->set_body(ss.str());
//	con->set_status(websocketpp::http::status_code::ok);
//}
//
//int main() {
//	// 使⽤websocketpp库创建服务器
//	websocketsvr server;
//	// 设置websocketpp库的⽇志级别
//	// all表⽰打印全部级别⽇志
//	// none表⽰什么⽇志都不打印
//	server.set_access_channels(websocketpp::log::alevel::none);
//	/*初始化asio*/
//	server.init_asio();
//	// 注册http请求的处理函数
//	server.set_http_handler(bind(&OnHttp, &server, ::_1));
//	// 注册websocket请求的处理函数
//	server.set_open_handler(bind(&OnOpen, &server, ::_1));
//	server.set_close_handler(bind(&OnClose, &server, _1));
//	server.set_message_handler(bind(&OnMessage, &server, _1, _2));
//	// 监听8888端⼝
//	server.listen(8888);
//	// 开始接收tcp连接
//	server.start_accept();
//	// 开始运⾏服务器
//	server.run();
//	return 0;
//}



//客户端
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta http - equiv = "X-UA-Compatible" content = "IE=edge">
< meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title > Test Websocket< / title>
< / head>
<body>
<input type = "text" id = "message">
<button id = "submit">提交< / button>
<script>
// 创建 websocket 实例
// ws://192.168.51.100:8888
// 类⽐http
// ws表⽰websocket协议
// 192.168.51.100 表⽰服务器地址
// 8888表⽰服务器绑定的端⼝
let websocket = new WebSocket("ws://192.168.51.100:8888");

// 处理连接打开的回调函数
websocket.onopen = function() {
	console.log("连接建⽴");
}
// 处理收到消息的回调函数
// 控制台打印消息
websocket.onmessage = function(e) {
	console.log("收到消息: " + e.data);
}
// 处理连接异常的回调函数
websocket.onerror = function() {
	console.log("连接异常");
}
// 处理连接关闭的回调函数
websocket.onclose = function() {
	console.log("连接关闭");
}
// 实现点击按钮后, 通过 websocket实例 向服务器发送请求
let input = document.querySelector('#message');
let button = document.querySelector('#submit');
button.onclick = function() {
	console.log("发送消息: " + input.value);
	websocket.send(input.value);
}
< / script>
< / body>
< / html>